package my.mark.mybaibaoxiang.jvm;

class A {
    static {
        System.out.print("A");
    }
    public A() {
        System.out.print("a");
    }
    void say() {
        System.out.print("1");
    }
}
class B extends A {
    static {
        System.out.print("B");
    }
    public B() {
        System.out.print("b");
    }
    void say() {
        System.out.print("2");
    }
}

//1.实例化B B所在类未加载 首先加载B所在类B B有父类A  所以类加载顺序 A,B 打印AB
//2.实例化B 调用父类构造方法 再调用自身构造方法 打印ab
//3.B中重写了父类say 直接调用本身类的say 打印2
//4.第二次实例化B 类加载只会执行一次 1中已完成 直接重复2 3步骤 打印ab2
//结果为ABab2ab2
public class Hello {
    public static void main(String[] args) {
        A ab = null;
        ab = new B();
        ab.say();
        ab = new B();
        ab.say();
    }
}
